Skip to content

refactor: rebuild ASM transformation framework and support 26.3 - #399

Merged
xfl03 merged 3 commits into
xfl03:15-developfrom
ZekerZhayard:15/26.3
Oct 1, 2026
Merged

xfl03 merged 3 commits into
xfl03:15-developfrom
ZekerZhayard:15/26.3

Conversation

@ZekerZhayard

Copy link
Copy Markdown
Collaborator
  • Replace registry-based transformer engine with declarative TransformationPlan/TransformationRule/TransformationRuleProvider, plus RuntimeVersion and VersionSelector
  • Simplify PatchSupport and rewrite Interface/Render/SkinManager/ SkinTexture patches
  • Clean up Fabric/Forge/NeoForge transformer bootstraps
  • Optimize reflection/texture utilities and fake skin manager paths
  • Bump version to 15.1 and add 26.3 to supported game versions
  • CI: bump actions/checkout to v7, publish to client environment
  • Upgrade Gradle wrapper

- Replace registry-based transformer engine with declarative
  TransformationPlan/TransformationRule/TransformationRuleProvider,
  plus RuntimeVersion and VersionSelector
- Simplify PatchSupport and rewrite Interface/Render/SkinManager/
  SkinTexture patches
- Clean up Fabric/Forge/NeoForge transformer bootstraps
- Optimize reflection/texture utilities and fake skin manager paths
- Bump version to 15.1 and add 26.3 to supported game versions
- CI: bump actions/checkout to v7, publish to client environment
- Upgrade Gradle wrapper

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🟡 Changes recommended

The new instruction helper can emit invalid stack-map frames, and the Fabric mixin package lookup can fail during initialization.

Get a fresh assessment by requesting another Copilot review.

Review effort: Lite
Findings: 2 High severity

Open (2)
What changed in this PR

Refactors the shared ASM transformation framework to declarative, version-aware rules while adding Minecraft 26.3 support and updating build/CI tooling.

Changes:

  • Replaces registry-based transformers with TransformationPlan and rule providers.
  • Reworks loader bootstraps, skin patches, and fake runtime utilities.
  • Updates versions, Gradle, GitHub Actions, and publishing configuration.
File Description
gradlew.bat Updates wrapper comments.
gradlew Updates wrapper comments.
gradle/​wrapper/​gradle-wrapper.properties Upgrades Gradle.
gradle.properties Sets Minecraft 26.3 versions.
Common/​src/​main/​java/​customskinloader/​utils/​TextureUtil.java Simplifies reflective fields.
Common/​src/​main/​java/​customskinloader/​loader/​MojangAPILoader.java Adds local API response model.
Common/​src/​main/​java/​customskinloader/​loader/​GameProfileLoader.java Adds local texture payload model.
Common/​src/​main/​java/​customskinloader/​fake/​FakeSkinManager.java Updates fake manager hooks.
Common/​src/​main/​java/​customskinloader/​fake/​FakeSkinBuffer.java Updates skin processing hooks.
build.info.json Bumps version and adds 26.3.
Bootstrap/​NeoForgeV2/​.../​TransformerBootstrap.java Implements NeoForge processor directly.
Bootstrap/​NeoForgeV2/​.../​ClassProcessorProviderImpl.java Registers the new processor.
Bootstrap/​ForgeV2/​.../​TransformerBootstrap.java Consolidates ModLauncher transformers.
Bootstrap/​ForgeV2/​.../​TransformationService.java Registers the consolidated transformer.
Bootstrap/​ForgeV1/​.../​TransformerBootstrap.java Uses the new transformation plan.
Bootstrap/​ForgeV1/​.../​LoadingPlugin.java Adjusts transformer ordering.
Bootstrap/​FabricV1/​.../​TransformerBootstrap.java Reworks Fabric target injection.
Bootstrap/​FabricV1/​.../​MixinConfigPlugin.java Integrates new Fabric hooks.
Bootstrap/​Core/​.../​TransformationRuleProvider service file Registers patch providers.
Bootstrap/​Core/​.../​VersionSelector.java Adds version rule matching.
Bootstrap/​Core/​.../​TransformerBootstrapSupport.java Compiles and executes transformation plans.
Bootstrap/​Core/​.../​TransformationRuleProvider.java Defines rule provider API.
Bootstrap/​Core/​.../​TransformationRule.java Defines transformation rules.
Bootstrap/​Core/​.../​TransformationPlan.java Implements rule compilation and execution.
Bootstrap/​Core/​.../​TransformationObserver.java Defines transformation callbacks.
Bootstrap/​Core/​.../​TargetedClassTransformer.java Removes obsolete transformer API.
Bootstrap/​Core/​.../​RuntimeClassTransformerEngine.java Removes obsolete engine.
Bootstrap/​Core/​.../​SkinTexturePatch.java Rewrites skin texture transformations.
Bootstrap/​Core/​.../​SkinManagerPatch.java Rewrites skin manager transformations.
Bootstrap/​Core/​.../​RenderPatch.java Rewrites rendering transformations.
Bootstrap/​Core/​.../​PatchSupport.java Adds declarative rule and instruction helpers.
Bootstrap/​Core/​.../​InterfacePatch.java Declares interface patches as rules.
Bootstrap/​Core/​.../​ClassTransformerRegistry.java Removes obsolete registry.
Bootstrap/​Core/​.../​ClassTransformationReport.java Reports applied rules and transformed output.
Bootstrap/​Core/​.../​ClassTransformationContext.java Simplifies transformation context.
.github/​workflows/​release.yml Updates checkout and publishing.
.github/​workflows/​pull-request.yml Updates checkout action.
.github/​workflows/​beta.yml Updates checkout action.
.github/​actions/​build/​action.yml Updates Java setup action.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment on lines +225 to +229
after.add(label0);
after.add(new FrameNode(F_SAME, 0, null, 0, null));
after.add(replacement);
after.add(label1);
after.add(new FrameNode(F_SAME, 0, null, 0, null));
- Replace the placeholder F_SAME frames in PatchSupport with real frames
  derived via AnalyzerAdapter, since the ForgeV1 path writes with
  COMPUTE_MAXS and cannot enable COMPUTE_FRAMES under LaunchWrapper
- Add FrameCapture to derive the stack/locals state around the replaced
  instruction without loading any class; compressed-frame platforms
  (ModLauncher) keep relying on their own frame recomputation
- Read ForgeV1 class bytecode with EXPAND_FRAMES so frames can be analyzed
- Keep the original instruction as dead code for later Mixin/coremod
  compatibility, and pass the transformation context to the call sites
- Rewrite the SkinManager CacheKey redirect as a linear NEW/DUP removal
  and drop the manual F_SAME injection in getInsecureSkinInformation
@xfl03
xfl03 merged commit 5830503 into xfl03:15-develop Oct 1, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants